﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIGCBI.Entities;
using System.Data;
using System.Data.Entity;
using System.Data.Objects;

namespace SIGCBI.Repository
{
    public interface IKardexRepository
    {
        List<KARDEX> GetFromKardexByNombreProducto_Fechas_IdProducto(string descripcion, DateTime? fec1, DateTime? fec2, int IdProducto);
        List<KARDEX> GetAllFromKardexByIdProducto(int IdProducto);
    }

    public class KardexRepository : MasterDataAccess, IKardexRepository
    {       

        public List<KARDEX> GetFromKardexByNombreProducto_Fechas_IdProducto(string descripcion, DateTime? fec1, DateTime? fec2, int IdProducto)
        {
            if (descripcion != "")
            {
                var query = from c in Context.KARDEXes.Include("PRODUCTO.UNIDAD_MEDIDA")
                            where (c.PRODUCTO.Nombre.ToUpper().Contains(descripcion.ToUpper()) ||
                            c.PRODUCTO.Codigo.ToUpper().Contains(descripcion.ToUpper()))
                            && (c.IdProducto.Equals(IdProducto))
                            select c;

                ObjectContext.Refresh(RefreshMode.StoreWins, query);

                return query.ToList();
            }
            else if (fec1 != null && fec2 != null)
            {
                var query = from c in Context.KARDEXes.Include("PRODUCTO.UNIDAD_MEDIDA")
                            where c.Fecha >= fec1.Value && c.Fecha <= fec2.Value
                            select c;

                ObjectContext.Refresh(RefreshMode.StoreWins, query);

                return query.ToList();
            }
            else if (descripcion != "" && fec1 != null && fec2 != null)
            {
                var query = from c in Context.KARDEXes.Include("PRODUCTO.UNIDAD_MEDIDA")
                            where (c.PRODUCTO.Nombre.ToUpper().Contains(descripcion.ToUpper()) ||
                            c.PRODUCTO.Codigo.ToUpper().Contains(descripcion.ToUpper()))
                            && c.Fecha >= fec1.Value && c.Fecha <= fec2.Value
                            && (c.IdProducto.Equals(IdProducto))
                            select c;

                ObjectContext.Refresh(RefreshMode.StoreWins, query);

                return query.ToList();
            }
            else
            {
                var query = from c in Context.KARDEXes.Include("PRODUCTO.UNIDAD_MEDIDA")
                            where c.IdProducto.Equals(IdProducto)
                            select c;

                ObjectContext.Refresh(RefreshMode.StoreWins, query);

                return query.ToList();
            }
        }

        public List<KARDEX> GetAllFromKardexByIdProducto(int IdProducto)
        {
            var query = from c in Context.KARDEXes.Include("PRODUCTO.UNIDAD_MEDIDA")
                        where c.IdProducto.Equals(IdProducto)
                        select c;

            ObjectContext.Refresh(RefreshMode.StoreWins, query);

            return query.ToList();
        }
    }
}
